<?php


namespace app\common\util;


use app\common\constants\ReturnCodeConstants;
use think\response\Json;


class Response
{

    /**
     * 成功返回（json）
     * @param array $data 数据
     * @param int $code 状态码
     * @param string $msg 消息
     * @return Json
     */
    public static function successJson(array $data = [], int $code = ReturnCodeConstants::SUCCESS_CODE, string $msg = ''): Json
    {
        return json(self::successReturn($code, $msg, $data));
    }

    /**
     * 失败返回（json）
     * @param int $code 状态码
     * @param string $msg 消息
     * @param array $data 数据
     * @return Json
     */
    public static function failureJson(int $code = ReturnCodeConstants::DEFAULT_ERROR_CODE, string $msg = '', array $data = []): Json
    {
        return json(self::failReturn($code, $msg, $data), ReturnCodeConstants::getHttpCode($code));
    }

    /**
     * 成功返回
     * @param int $code 返回状态码
     * @param string $msg 返回消息
     * @param array $data 返回数据
     * @param int $count 数据统计
     * @return array
     */
    public static function successReturn(int $code, string $msg = '', array $data = [], int $count = 0): array
    {
        $data = [
            'code' => $code,
            'msg' => $msg === '' ? ReturnCodeConstants::getCodeMessage($code) : $msg,
            'data' => $data,
        ];
        if ($count !== 0) {
            $data['count'] = $count;
        }
        return $data;
    }


    /**
     * 失败返回
     * @param int $code 返回状态码
     * @param string $msg 返回消息
     * @param array $data 返回数据
     * @return array
     */
    public static function failReturn(int $code, string $msg = '', array $data = []): array
    {
        return [
            'code' => $code,
            'msg' => $msg === '' ? ReturnCodeConstants::getCodeMessage($code) : $msg,
            'data' => $data,
        ];
    }
}